package run;
import java.io.InputStream;
import java.util.ArrayList;

import outils.Ligne;
import outils.Parser;

/**
 * 
 */

/**
 * @author alith
 * Cette classe est la modelisation d'une commande.
 */
public class Commande implements Executable {
	protected Ligne commande;
	
	public Commande(String ligne) {
		commande = new Ligne (ligne);
	}
	
	public Commande(Ligne ligne) {
		commande = new Ligne (ligne);
	}
	
	public ResultatExecutionLigneCommande execute(){
		ArrayList<Ligne> result = new ArrayList<Ligne>();
		int state = -1;
		try {
	       ProcessBuilder pb = new ProcessBuilder(commande);
	       //pb = pb.redirectErrorStream(true);
	       Process p = pb.start();
	       InputStream retour = p.getInputStream();
	       InputStream erreurs = p.getErrorStream();
	       p.waitFor();
		   result = Parser.getLignes(retour);
		   result.addAll(Parser.getLignes(erreurs));
		   state = p.exitValue();
		} catch (Exception e) {
			System.out.println("Erreur dans l'execution de la commande: " + commande.toString());
			System.out.println("avec le message: " + e.getMessage());
			System.exit(1);
		}
		ResultatExecutionLigneCommande aux = new ResultatExecutionLigneCommande(result,commande.toString(),state);
		//System.out.println(aux.getRetour());		
		return aux;
	}
}
